//
//  NSString+PFDES.m
//  23_加密
//
//  Created by 鹏飞罗 on 16/8/16.
//  Copyright © 2016年 LST. All rights reserved.
//

#import "NSString+PFDES.h"
#import <CommonCrypto/CommonCrypto.h>

// 必须8位
#define key @"01234567"
// 向量
static Byte iv[] = {1,2,3,4,5,6,7,8};
@implementation NSString (PFDES)
- (NSString *)stringWithDES {
//    1.将字符串本身转换成C字符串
    const char *string = [self UTF8String];
//    2.接受容器
    unsigned char byte[1024];
//    3.容器大小
    size_t dataOutMoved = 0;
//    4.DES加密过程
//    参数1： 加密/解密
//    参数2： 加密/解密 方式
//    参数3： 分组密码的选项
//    参数4：密钥
//    参数5：key的大小
//    参数6：向量
//    参数7：c的字符串
//    参数8： 长度length
//    参数9； 接受容器
//    参数10： 容器大小
//    参数11： 容器最中的个数
  CCCryptorStatus cryptorStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding, [key UTF8String], kCCKeySizeDES, iv, string, strlen(string), byte, 1024, &dataOutMoved);
//   5. 判断是否成功
    if (cryptorStatus == kCCSuccess) {
//        转换字符串----base64返回
        NSData *desData = [NSData dataWithBytes:byte length:dataOutMoved];
        NSString *desBase64String = [desData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
        return desBase64String;
    }
    NSLog(@"DES加密失败");
    return nil;
}


- (NSString *)desWithString {
    NSData *data = [[NSData alloc] initWithBase64EncodedString:self options:NSDataBase64DecodingIgnoreUnknownCharacters];
    const void *byte = data.bytes;
    unsigned char buffer[1024];
    size_t dataOutMoved = 0;
    CCCryptorStatus cryptorStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding, [key UTF8String], kCCKeySizeDES, iv, byte, [data length], buffer, 1024, &dataOutMoved);
    if (cryptorStatus == kCCSuccess) {
        NSData *sourceData = [[NSData alloc] initWithBytes:buffer length:dataOutMoved];
        NSString *sourceString = [[NSString alloc] initWithData:sourceData encoding:NSUTF8StringEncoding];
        return sourceString;
    }
    NSLog(@"DES加密失败");
    return nil;
    
    
//    const char *string = [self UTF8String];
//    unsigned char byte[1024];
//    size_t dataOutMoved = 0;
//  CCCryptorStatus cryptorStatus =  CCCrypt(kCCDecrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding,  [key UTF8String], kCCKeySizeDES, iv, string, strlen(string), byte, 1024, &dataOutMoved);
//    if (cryptorStatus == kCCSuccess) {
//        NSData *desData = [[NSData alloc] initWithBase64EncodedString:self options:NSDataBase64DecodingIgnoreUnknownCharacters];
//        NSString *originString = [[NSString alloc] initWithData:desData encoding:NSUTF8StringEncoding];
//        return originString;
//    }
//     NSLog(@"DES解密失败");
    return nil;
}
@end
